package com.xindacloud.sms.adapter.vo;


import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;
import lombok.Data;

import java.util.Date;
import java.util.List;

@Data
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public class SearchNexmoMessageVO extends SmsBaseResponseVO {

    private List<MessageInfo> list;

    @JsonIgnoreProperties(ignoreUnknown = true)
    @Data
    public static class MessageInfo {


        /**
         * 主键
         * messageID
         * isNullAble:0
         */
        private String messageId;

        /**
         * 消息类型。MT（移动设备终止或出站）或MO（移动设备原始或入站）
         * isNullAble:1,defaultVal:MT
         */
        private String type;

        /**
         * 使用平台中的哪个账户发送的
         * isNullAble:1
         */
        private String accountId;

        /**
         * 网络编码46000
         * isNullAble:1
         */
        private String network;

        /**
         * 发送者
         * isNullAble:1
         */
        @JsonProperty("from")
        private String sendFrom;

        /**
         * 接受者
         * isNullAble:1
         */
        @JsonProperty("to")
        private String sendTo;

        /**
         * 消息内容
         * isNullAble:1
         */
        @JsonProperty("body")
        private String messageBody;

        /**
         * 平台以以下格式接收您的请求时的UTC + 0的日期和时间：YYYY-MM-DD HH:MM:SS。
         * isNullAble:1
         */
        private Date dateReceived;

        /**
         * 价格
         * isNullAble:1
         */
        private String price;

        /**
         * 平台从发送MT消息的运营商处收到交付收据时的UTC + 0的日期和时间。此参数的格式如下YYYY-MM-DD HH:MM:SS。
         * isNullAble:1
         */
        private Date dateClosed;

        /**
         * date-received之间date-closed的总延迟（以毫秒为单位）
         * isNullAble:1
         */
        private Integer latency;

        /**
         * 您在请求中设置的内部参考
         * isNullAble:1
         */
        private String clientRef;

        /**
         * 解释消息在传递过程中的位置的代码。如果状态不是，delivered请检查error-code更多信息。如果status为，则accepted忽略的值error-code。
         * delivered，expired，failed，rejected，accepted，buffered或者unknown
         * isNullAble:1
         */
        private String status;

        /**
         * 状态message-id的date-closed。
         * DELIVRD，EXPIRED，UNDELIV，REJECTD或者UNKNOWN
         * isNullAble:1
         */
        private String finalStatus;

        /**
         * 0，1，2，3，4，5，6，7，8，9，10，11，12，13，14，15，99，400或者401
         * isNullAble:1
         */
        private String errorCode;

        /**
         * isNullAble:1
         */
        private String errorCodeLabel;

        /**
         * isNullAble:1,defaultVal:CURRENT_TIMESTAMP
         */
        private Date createTime;

        /**
         * isNullAble:1,defaultVal:CURRENT_TIMESTAMP
         */
        private Date lastUpdate;
    }

}
